package com.boss.salary.dao;

import com.boss.framework.dto.PaginationDTO;
import com.boss.salary.entity.*;
import com.boss.salary.vo.unitReportVO;
import com.boss.sys.ca.user.dto.UserDTO;

import java.util.List;
import java.util.Map;

public interface IAgencyVerifyDao {
    /**
     * 增加 机构上报审核状态表数据
     * @param agencyVerify
     * @return
     */
    void saveAgencyVerify(AgencyVerify agencyVerify);

    /**
     * 更新 机构上报审核状态表数据
     * @param agencyVerify
     * @return
     */
    void updateAgencyVerify(AgencyVerify agencyVerify);

    /**
     * 设置当月工资编报送审或审核状态
     * @param agencyVerify
     */
    void updateAgencyState(AgencyVerify agencyVerify,String mof_div_code);

    /**
     * 根据机构ID和状态名称查询状态
     * @param agencyId
     * @return
     */
    Map<String, Object> selectStateByAgencyId(String agencyId,String isThirteen, String... columnNames);

    /**
     * 根据机构ID和状态名称查询状态
     * @param agencyId
     * @return
     */
    Map<String, Object> selectStateByAgencyIds(String agencyId, String... columnNames);

    /**
     * 根据机构ID和状态名称查询状态，带bizkey和页签标识
     * @param agencyId
     * @return
     */
    Map<String, Object> selectStateByAgencyIdAndBizkey(String agencyId,List<String> bizkeys,String flag, String... columnNames);

    /**
     * 根据机构ID和状态名称查询状态，带bizkey和页签标识
     * @param agencyId
     * @return
     */
    Map<String, Object> selectStateByAgencyIdAndBizkey1(String agencyId,List<String> bizkeys,String flag, String... columnNames);



    /**
     * 批量更新月结状态
     * @param params
     */
    void batchUpdateMonthEnd(List<Object[]> params);

    /**
     * 批量插入初始数据
     * @param params
     */
    void batchInsertInitDate(List<Object[]> params);

    /**
     * 删除未月结的数据
     * @param agencyIds
     */
    void deleteNoMonthEnd(List<String> agencyIds);

    /**
     * 更新已月结状态为未月结
     * @param month
     * @param agencyIds
     */
    void updateAlreadyMonthEnd(String month, List<String> agencyIds);
    /**
     * 确认应发、实发工资
     * @param params
     */
    void updateSalaryVerify(List<Object[]> params);

    /**
     * 根据单位id获取单位下未月结的数据
     * @param agencyIds
     * @return
     */
    List<AgencyVerify> getAgencyVerifyByAgencyIds(List<String> agencyIds);

    /**
     * 带bizkeys的查询方法     * @param agencyIds
     * @param bizKeys
     * @return
     */
    List<AgencyVerify> getAgencyVerifyByAgencyIdsBizkey(List<String> agencyIds,List<String> bizKeys);
    /**
     * 根据单位id获取单位下未月结的数据
     * @param bizKeys
     * @return
     */
    List<AgencyVerify> getAgencyVerifyByAgencyIds1(List<String> bizKeys);
    /**
     * 根据单位id获取单位下未月结的已生成支付数据
     * @param agencyIds
     * @return
     */
    List<AgencyVerify> getAgencyVerifyPayByAgencyIds(List<String>agencyIds );

    /**
     * 单位变动人数
     * @param agencyId
     */
    void updateChangePersonNum(String agencyId);

    /**
     * 增加人数
     * @param agencyId
     */
    void updateAddPersonNum(String agencyId);
    /**
     * 增加离休人数
     * @param agencyId
     */
    void updateAddQuitPersonNum(String agencyId);

    /**
     * 消减人数
     * @param agencyId
     */
    void updateDeletePersonNum(String agencyId);

    /**
     * 根据单位id获取未月结，非十三月工资的数据
     * @param agencyId
     * @return
     */
    AgencyVerify getInfoByAgencyId(String agencyId);

    /**
     * 根据单位id获取未月结，非十三月工资的数据
     * @param agencyId
     * @return
     */
    AgencyVerify getInfoByAgencyIds(String agencyId);
    /**
     * 财政确认 合计
     * @param queryParam
     * @return
     */
    SalaryRental fiscalCombined( Map<String, Object>queryParam, List<String> bizKeys,List<String> childrenId);

    /**
     * 修改财政工资信息审核状态
     * @param agencyVerify
     */
    void updateFinancialVerifyStatus(AgencyVerify agencyVerify);

    /**
     * 批量修改财政工资信息审核状态
     * @param agencyVerify
     */
    void batchUpdateFinancialVerifyStatus(List<AgencyVerify> agencyVerify);

    /**
     * 获取本月新增人数
     * @param agencyId
     * @return
     */
    int getAddPersonNumByAgencyId(String agencyId);

    /**
     * 获取单位审核状态表未月结的所有数据
     * @return
     */
    List<AgencyVerify> getAgencyVerifyInfo();

    /**
     * 获取单位上报情况列表
     * @param paginationDTO
     * @param state
     * @return
     */
    List<unitReportVO> selectUnitReportPage(PaginationDTO paginationDTO, String state, List<String> childrenId, String mofDivCode);

    /**
     * 获取单位上报情况总数
     * @param code
     * @return
     */
    int selectUnitReportTotal(String code, List<String> childrenId, String mofDivCode);

    /**
     * 根据单位id获取审核信息
     * @param agencyId
     * @return
     */
    AgencyVerify getAgencyVerifyByAgencyId(String agencyId);

    /**
     * 根据单位id判断是否生成工资数据
     * @param agencyIds
     * @return
     */
    List<AgencyVerify> getSalaryDataByAgencyId(List<String> agencyIds);

    /**
     * 根据机构id修改人员变动数量
     * @param agencyId
     * @param changeMap
     */
    void updateChangeNum(String agencyId, Map<String, String> changeMap);

    /**
     * 通过区划获取出现重复人员id
     * @param mov_div_code
     * @return
     */
    List<Map<String,Object>> selectOverlapPersionIds(String mov_div_code);

    /**
     * 通过人员id列表查找人员涉及到的单位信息，包含上报情况

     * @return
     */
    List<Map<String,Object>> selectOverlapPersionInfo(String mov_div_code);

    /**
     * 通过区划获取统发月份
     * @param province
     * @return
     */
    String getSalaryMonth(String province,String agencyId);

    /**
     * 查看单位数据是否产生变动
     * @param agencyId
     * @return
     */
    Map<String,Object> checkAgencyIsChanged(String agencyId);

    /**
     * 修改生成工资数据状态为未生成
     * @param agencyVerifys
     */
    void batchUpdateAgencyVerifypayStatus(List<AgencyVerify> agencyVerifys);

    /**
     * 查询工资数据已生成的审核数据
     * @param bank
     * @param mofDivCode
     * @return
     */
    List<AgencyVerify> getAgencyVerifyBySalaryBank(String bank,String mofDivCode);
    /**
     * 修改生成银行数据状态
     * @param agencyVerifys
     */
    void batchUpdateAgencyVerifyBankStatus(List<AgencyVerify> agencyVerifys,String status);

    List<AgencyVerify> queryAgencyIfo(List<AgencyVerify> agencyInfo, UserDTO userDTO);

    /**
     * 插入AgencyInfo表
     * @param agencyInfoList
     */
    void insertAgencyInfo(List<AgencyVerify> agencyInfoList);

    /**
     * 插入AgencyVerify表
     * @param agencyInfoList
     */
    void insertAgencyVerify(List<AgencyVerify> agencyInfoList);

    /**
     * 插入AgencyExt表
     * @param agencyInfoList
     */
    void insertAgencyExt(List<AgencyVerify> agencyInfoList);

    /**
     *通过单位ID查询PersonExt表银行信息
     * @param angencyId
     * @return List<PersonExt>
     */
    List<PersonExt> selectPersonExtByAgencyId(String angencyId);

    /**
     *通过单位ID查询AgencyExt表银行信息
     * @param angencyId
     * @return AgencyExt
     */
    AgencyExt selectAgencyExtByAgencyId(String angencyId);


    List<Map<String, Object>> selectPersonTransfer(String province, String month);

    void revokeGenerate(String province);

    String currentYear(String province);

    void updateAgencyVerifyCode(List<AgencyVerify> updateList);

    List<AgencyVerify> queryAgencyVerify(List<AgencyVerify> agencyVerifies);

    List<AgencyVerify> agencyVerifyByAgencyId(String getAgencyIds);

    void updateAgencyVerifyDouble(AgencyVerify agencyVerify);

    List<AgencyVerify>  getInfoByAgency(String bizKey);

    List<AgencyVerify> getAgencyVerifyBizKey(List<String> bizKeys);

    AgencyVerify getInfoByBizKey(String bizKey);

    Map<String, Object> selectStateByAgencyIdDouble(String agencyId, String... columnNames);

}
